package speelotheek.views;

import javax.swing.GroupLayout.Alignment;
import javax.swing.GroupLayout;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.LayoutStyle.ComponentPlacement;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import speelotheek.models.Lid;
import speelotheek.models.Speelgoed;
import speelotheek.models.Uitlening;

/**
 *
 * @author mabarto
 */
public class BorrowInfo extends JDialog {

    /**
	 * 
	 */
	private static final long serialVersionUID = 5328546916208163608L;
	
	private DateFormat nl = new SimpleDateFormat("yyyy-MM-dd");
	private Date todayDate = new Date();
	private Calendar calendar = Calendar.getInstance();
	
	private Uitlening uitlening;
	
	public BorrowInfo(String code)
	{
		setInitWaarden();
		leesWaarden(code);
	}
	
	/**
     * Creates new form BorrowInfo
     */
    public BorrowInfo() {
    	setInitWaarden();
    }
    
    private void leesWaarden(String code)
    {
    	Speelgoed speelgoed = Speelgoed.getSpeelgoed(code);
    	if (speelgoed != null) uitlening.setSpeelgoed(speelgoed);
    }
    
    private void setInitWaarden() {
    	setBounds(100, 100, 350, 435);
    	setTitle("Speelgoed - Uitlenen");
    	setLocationRelativeTo(null); // Dialog scherm in het midden
    	setModal(true);

    	initComponents();
    	
    	uitlening = new Uitlening();
    	
    	// Zet de uitleendatum automatisch op de dag vandaag
    	uitleendatumField.setText(nl.format(todayDate));
    	
        // Zet de datum voor het terugbrengen 10 dagen later
        calendar.add(Calendar.DATE, 10);
        terugbrengdatumField.setText(nl.format(calendar.getTime()));
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    private void initComponents() {
        lidLabel = new javax.swing.JLabel();
        lidField = new javax.swing.JTextField();
        lidButton = new javax.swing.JButton();
        ledenList = new speelotheek.components.JSqlList();
        uitleendatumLabel = new javax.swing.JLabel();
        uitleendatumField = new javax.swing.JTextField();
        terugbrengdatumLabel = new javax.swing.JLabel();
        terugbrengdatumField = new javax.swing.JTextField();
        bijzonderhedenLabel = new javax.swing.JLabel();
        bijzonderhedenList = new javax.swing.JScrollPane();
        bijzonderhedenField = new javax.swing.JTextArea();
        uitlenenButton = new javax.swing.JButton();

        lidLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        lidLabel.setText("Lid:");

        lidButton.setText("Zoek");
        lidButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                lidButtonActionPerformed(evt);
            }
        });
        
        uitleendatumLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        uitleendatumLabel.setText("Uitleendatum:");

        terugbrengdatumLabel.setText("Terugbrengdatum:");
        
        bijzonderhedenLabel.setText("Bijzonderheden");

        bijzonderhedenField.setColumns(20);
        bijzonderhedenField.setRows(5);
        bijzonderhedenList.setViewportView(bijzonderhedenField);

        uitlenenButton.setText("Uitlenen");
        uitlenenButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                uitleenButtonActionPerformed(evt);
            }
        });
        
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
        	layout.createParallelGroup(Alignment.LEADING)
        		.addGroup(Alignment.TRAILING, layout.createSequentialGroup()
        			.addContainerGap()
        			.addGroup(layout.createParallelGroup(Alignment.TRAILING)
        				//.addComponent(speelgoedList, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 293, Short.MAX_VALUE)
        				.addComponent(bijzonderhedenList, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 256, Short.MAX_VALUE)
        				.addComponent(bijzonderhedenLabel, Alignment.LEADING)
        				.addGroup(layout.createSequentialGroup()
        					.addComponent(lidLabel, GroupLayout.DEFAULT_SIZE, 81, Short.MAX_VALUE)
        					.addPreferredGap(ComponentPlacement.RELATED)
        					.addComponent(lidField, GroupLayout.PREFERRED_SIZE, 125, GroupLayout.PREFERRED_SIZE)
        					.addPreferredGap(ComponentPlacement.RELATED)
        					.addComponent(lidButton))
        				.addGroup(Alignment.LEADING, layout.createSequentialGroup()
        					.addGroup(layout.createParallelGroup(Alignment.LEADING, false)
        						.addComponent(terugbrengdatumLabel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        						.addComponent(uitleendatumLabel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        					.addPreferredGap(ComponentPlacement.RELATED)
        					.addGroup(layout.createParallelGroup(Alignment.LEADING)
        						.addComponent(uitleendatumField, 134, 134, 134)
        						.addComponent(terugbrengdatumField, 134, 134, 134)))
        				.addComponent(ledenList, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 256, Short.MAX_VALUE)
        				.addComponent(uitlenenButton, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 256, Short.MAX_VALUE))
        			.addGap(75))
        );
        layout.setVerticalGroup(
        	layout.createParallelGroup(Alignment.TRAILING)
        		.addGroup(Alignment.LEADING, layout.createSequentialGroup()
        			.addContainerGap()
        			.addPreferredGap(ComponentPlacement.UNRELATED)
        			.addGroup(layout.createParallelGroup(Alignment.BASELINE)
        				.addComponent(lidLabel)
        				.addComponent(lidField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
        				.addComponent(lidButton))
        			.addPreferredGap(ComponentPlacement.RELATED)
        			.addComponent(ledenList, GroupLayout.PREFERRED_SIZE, 39, GroupLayout.PREFERRED_SIZE)
        			.addPreferredGap(ComponentPlacement.UNRELATED)
        			.addGroup(layout.createParallelGroup(Alignment.BASELINE)
        				.addComponent(uitleendatumLabel)
        				.addComponent(uitleendatumField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
        			.addPreferredGap(ComponentPlacement.UNRELATED)
        			.addGroup(layout.createParallelGroup(Alignment.BASELINE)
        				.addComponent(terugbrengdatumLabel)
        				.addComponent(terugbrengdatumField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
        			.addPreferredGap(ComponentPlacement.UNRELATED)
        			.addComponent(bijzonderhedenLabel)
        			.addPreferredGap(ComponentPlacement.RELATED)
        			.addComponent(bijzonderhedenList, GroupLayout.DEFAULT_SIZE, 89, Short.MAX_VALUE)
        			.addPreferredGap(ComponentPlacement.UNRELATED)
        			.addComponent(uitlenenButton)
        			.addContainerGap())
        );
        this.setLayout(layout);
    }// </editor-fold>//GEN-END:initComponents
    

    //selecteer lid uit de getoonde lijst
    private Lid getLid() {
      Lid eenLid = (Lid) ledenList.getSelectedObject();    
      if (eenLid == null) {
        JOptionPane.showMessageDialog(null, "Geen lid geselecteerd");
      }else{
        System.out.println("LidZoeken " + eenLid.getNummer() + ": " + eenLid.getNaam());
      }
      return eenLid;
    }    
    
    
    private void uitleenButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_SpeelgoedButtonActionPerformed    	
    	
    	if (!uitlening.getSpeelgoed().isUitgeleend())
    	{
	    	// Controle of lid is geselecteerd en zet het nummer van lid in uitlening
	    	Lid lid = getLid();
    		if (lid != null)
    		{
	    		uitlening.setLid(lid);
	    	
	    		// Controleer de uitleendatum en zet in uitlening
	    		try {
	    	      Date uitleendatum = nl.parse(uitleendatumField.getText());
	    	      uitlening.setUitleendatum(uitleendatum); 
	    	    } catch (ParseException ex) {
	    	      JOptionPane.showMessageDialog(null, "uitleen datum moet van de vorm dd-MM-yyyy zijn", "error", JOptionPane.ERROR_MESSAGE);
	    	      System.out.println("Uitlening: save: " + ex.getMessage());
	    	    }
	    	
	    		// Controleer de terugbrengdatum en zet in uitlening
	    		try {
	      		  Date terugbrengdatum = nl.parse(terugbrengdatumField.getText());
	      		  uitlening.setTerugbrengdatum(terugbrengdatum); 
	  	    	} catch (ParseException ex) {
	  	    	  JOptionPane.showMessageDialog(null, "terugbreng datum moet van de vorm dd-MM-yyyy zijn", "error", JOptionPane.ERROR_MESSAGE);
	  	    	  System.out.println("Uitlening: save: " + ex.getMessage());
	  	    	}
	    	
	    		// Zet bijzonderheden in uitlening
	    		uitlening.setBijzonderheden(bijzonderhedenField.getText());
	
	    		if (uitlening.save()) {
	    			//en sluit het venster  
	    			this.dispose();
	    		} else {
	    			System.out.println("Uitlening: opslaan: " + "probleem bij opslaan van " + uitlening.toString());
	    		}
    		}
    		else
			{
				JOptionPane.showMessageDialog(null, "U heeft geen lid geselecteerd.", "error", JOptionPane.ERROR_MESSAGE);
	    		System.out.println("Uitlening: save: Geen lid voor uitlening geselecteerd.");    		
			}

    	} 
    	else 
    	{
	    	  JOptionPane.showMessageDialog(null, "Speelgoed is al uitgeleend");
    	}
    }//GEN-LAST:event_uitleenButtonActionPerformed
    
    private void lidButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_SpeelgoedButtonActionPerformed
        String deel = lidField.getText();
        //haal lid op uit de database op basis van de naam of nummer
        Object[] lid = Lid.getAllNaamOrNummer(deel);
        //toon de opgehaalde gegevens
        ledenList.fillList(lid);
    }//GEN-LAST:event_lidButtonActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTextArea bijzonderhedenField;
    private javax.swing.JLabel bijzonderhedenLabel;
    private javax.swing.JScrollPane bijzonderhedenList;
    private speelotheek.components.JSqlList ledenList;
    private javax.swing.JButton lidButton;
    private javax.swing.JTextField lidField;
    private javax.swing.JLabel lidLabel;
    private javax.swing.JTextField terugbrengdatumField;
    private javax.swing.JLabel terugbrengdatumLabel;
    private javax.swing.JTextField uitleendatumField;
    private javax.swing.JLabel uitleendatumLabel;
    private javax.swing.JButton uitlenenButton;
    // End of variables declaration//GEN-END:variables
}
